#ifndef _SAI_OBJ_H_
#define _SAI_OBJ_H_
#include "../api/base.h"
#include "./sprite.h"
#include "./camera.h"

//步函数
typedef void(*sFunObjStep)(void*ob);
typedef void(*sFunObjDraw)(void*ob);
typedef void(*sFunObjColl)(void*self,void*other);
typedef void(*sFunObjEve)(void*ob,int type,int p1,int p2);


//obj结构体
typedef struct
{
 int x;
 int y;
 int id;//非唯一
 
 sSpr*spr;//精灵id
 int sprw;//改变精灵大小
 int sprh;
 
 sSpr*mask;//碰撞遮罩
 int mask_show;
 int act;//当前动作
 
 int img;//当前图片
 int img_sp;//更新速度
 int _img_tim;//上次更新时间
 
 int xsca;//翻转精灵
 int ysca;
 
 int view;//可视
 
 int sp;//运动速度方向
 int dir;
 
 //回调函数
 sFunObjStep step;//步函数
 sFunObjColl coll;//碰撞函数
 sFunObjDraw draw;//绘制函数
 sFunObjEve eve;//事件监控
 
 //存数据
 int data[10];
}sObj;

//创建obj
extern sObj*sNewObj(int x,int y,sSpr*spr);
//设置id
extern void sSetObjId(sObj*obj,int id);
//刷新精灵数据
extern void sRefObjSpr(sObj*obj);
//绘制obj
extern void sDrawObj(sObj*obj);
extern void sDrawObjPos(sObj*obj,int x,int y);
extern void sDrawObjCam(sObj*obj,sCam*cam);

//运行obj
extern void sRunObj(sObj*obj);

//碰撞检测
extern int sObjCollObj(sObj*obj1,sObj*obj2);
//点与obj碰撞
extern int sPosCollObj(int x,int y,sObj*obj);
//矩形与obj碰撞
extern int sRectCollObj(int x,int y,int w,int h,sObj*obj);

//释放obj
extern void sFreeObj(sObj*obj);

#endif
